/******************************************************************************
* 文件名称: queue.c
* 内容摘要: 队列
* 创建者の: 孔佳伟
* 个人主页: https://gitee.com/thin-wind/jump
* 修改记录: 
******************************************************************************/

#include <queue.h>

/******************************************************************************
* 函数名称: void QueueInit(QUEUE* queue)
* 功能说明: 队列初始化
* 输入参数: QUEUE* queue      --队列
* 输出参数: 无
* 函数返回: 无
* 其它说明: 无
******************************************************************************/
void QueueInit(QUEUE* queue)
{
    ListInit((LIST *)queue);
    queue->length = 0;
}

/******************************************************************************
* 函数名称: void QueueAdd(QUEUE* queue, QUEUE_NODE* node)
* 功能说明: 在队列尾插入一个节点
* 输入参数: QUEUE* queue      --队列
    　　　　QUEUE_NODE* node  --节点
* 输出参数: 无
* 函数返回: 无
* 其它说明: 无
******************************************************************************/
void QueueAdd(QUEUE* queue, QUEUE_NODE* node)
{
    ListAddTail((LIST *)queue, node);
    queue->length++;
}

/******************************************************************************
* 函数名称: void QueueHeadAdd(QUEUE* queue, QUEUE_NODE* node)
* 功能说明: 在队列头插入一个节点
* 输入参数: QUEUE* queue      --队列
    　　　　QUEUE_NODE* node  --节点
* 输出参数: 无
* 函数返回: 无
* 其它说明: 无
******************************************************************************/
void QueueHeadAdd(QUEUE* queue, QUEUE_NODE* node)
{
    ListAddHead((LIST *)queue, node);
    queue->length++;
}

/******************************************************************************
* 函数名称: QUEUE_NODE* QueueRemove(QUEUE* queue)
* 功能说明: 从队列头取出一个节点
* 输入参数: QUEUE* queue      --队列
* 输出参数: 无
* 函数返回: 取出的节点
* 其它说明: 无
******************************************************************************/
QUEUE_NODE* QueueRemove(QUEUE* queue)
{
    QUEUE_NODE* ret = NULL;
    if(queue->length > 0)
    {
        ret = queue->list.next;
        ListDelNode(ret);
        queue->length--;
    }

    return ret;
}

/******************************************************************************
* 函数名称: QUEUE_NODE* QueueTailRemove(QUEUE* queue)
* 功能说明: 从队列尾取出一个节点
* 输入参数: QUEUE* queue      --队列
* 输出参数: 无
* 函数返回: 取出的节点
* 其它说明: 无
******************************************************************************/
QUEUE_NODE* QueueTailRemove(QUEUE* queue)
{
    QUEUE_NODE* ret = NULL;
    if(queue->length > 0)
    {
        ret = queue->list.prev;
        ListDelNode(ret);
        queue->length--;
    }

    return ret;
}

/******************************************************************************
* 函数名称: BOOL QueueIsEmpty(QUEUE* queue)
* 功能说明: 队列是否为空
* 输入参数: QUEUE* queue      --队列
* 输出参数: 无
* 函数返回: 0:否; 1:是
* 其它说明: 无
******************************************************************************/
BOOL QueueIsEmpty(QUEUE* queue)
{
    return !queue->length;
}

/******************************************************************************
* 函数名称: U32 QueueLength(QUEUE* queue)
* 功能说明: 获取队列长度
* 输入参数: QUEUE* queue      --队列
* 输出参数: 无
* 函数返回: 队列长度
* 其它说明: 无
******************************************************************************/
U32 QueueLength(QUEUE* queue)
{
    return queue->length;
}

